﻿using System;
using System.Collections.Generic;
using System.Linq;
using Controller2.BLL;

namespace Controller2.Models.ViewModels
{
    public class JobViewModel
    {
        public int ID { get; set; }
        public string Cliente { get; set; }
        public string Campanha { get; set; }
        public string Midia { get; set; }
        public string DataInicio { get; set; }
        public string DataConclusao { get; set; }
        public string Etapa { get; set; }
        public string Status { get; set; }

        public IEnumerable<JobViewModel> Listar(ControllerBDModelContainer db, string texto, int filtro, string usuario = "")
        {
            IEnumerable<JobViewModel> job;
            int codigo = 0;
            if (filtro == 1)
            {
                if (!Int32.TryParse(texto, out codigo))
                {
                    filtro = 0;
                    texto = "";
                }
            }
            if (string.IsNullOrWhiteSpace(texto) || texto.Equals("Digite sua pesquisa"))
            {
                filtro = 0;
                texto = "";
            }
            switch (filtro)
            {
                default:
                    if (string.IsNullOrWhiteSpace(usuario))
                    {
                        job = from c in JobBll.GetAllJobs(db)
                              orderby c.IdJob
                              select new JobViewModel
                              {
                                  ID = c.IdJob,
                                  Cliente = c.Cliente.NomePessoa,
                                  Campanha = c.Campanha.Nome,
                                  Midia = c.Midia.Nome,
                                  DataInicio = c.DataInicio.ToShortDateString(),
                                  DataConclusao = c.DataConclusao == null ? "" : Convert.ToDateTime(c.DataConclusao).ToShortDateString(),
                                  Etapa = JobBll.GetEtapa(c.Etapa),
                                  Status = JobBll.GetStatus(c.Status)
                              };
                    }
                    else
                    {
                        job = from c in JobBll.GetAllJobs(db)
                              orderby c.IdJob
                              where c.Campanha.Cliente.UserName.Equals(usuario)
                              select new JobViewModel
                              {
                                  ID = c.IdJob,
                                  Cliente = c.Cliente.NomePessoa,
                                  Campanha = c.Campanha.Nome,
                                  Midia = c.Midia.Nome,
                                  DataInicio = c.DataInicio.ToShortDateString(),
                                  DataConclusao = c.DataConclusao == null ? "" : Convert.ToDateTime(c.DataConclusao).ToShortDateString(),
                                  Etapa = JobBll.GetEtapa(c.Etapa),
                                  Status = JobBll.GetStatus(c.Status)
                              };
                    }
                    break;
                case 1:
                    if (string.IsNullOrWhiteSpace(usuario))
                    {
                        job = from c in JobBll.GetAllJobs(db)
                              orderby c.IdJob
                              where c.IdJob == codigo
                              select new JobViewModel
                              {
                                  ID = c.IdJob,
                                  Cliente = c.Cliente.NomePessoa,
                                  Campanha = c.Campanha.Nome,
                                  Midia = c.Midia.Nome,
                                  DataInicio = c.DataInicio.ToShortDateString(),
                                  DataConclusao = c.DataConclusao == null ? "" : Convert.ToDateTime(c.DataConclusao).ToShortDateString(),
                                  Etapa = JobBll.GetEtapa(c.Etapa),
                                  Status = JobBll.GetStatus(c.Status)
                              };
                    }
                    else
                    {
                        job = from c in JobBll.GetAllJobs(db)
                              orderby c.IdJob
                              where c.IdJob == codigo && c.Campanha.Cliente.UserName.Equals(usuario)
                              select new JobViewModel
                              {
                                  ID = c.IdJob,
                                  Cliente = c.Cliente.NomePessoa,
                                  Campanha = c.Campanha.Nome,
                                  Midia = c.Midia.Nome,
                                  DataInicio = c.DataInicio.ToShortDateString(),
                                  DataConclusao = c.DataConclusao == null ? "" : Convert.ToDateTime(c.DataConclusao).ToShortDateString(),
                                  Etapa = JobBll.GetEtapa(c.Etapa),
                                  Status = JobBll.GetStatus(c.Status)
                              };
                    }
                    break;
            }

			return job.OrderBy(o => o.ID);
        }
    }
}